跳到主要内容

65 二叉树中属性操作的实现

二叉树中属性操作的实现(一)

  • 二叉树的属性操作

  • 二叉树中结点的数目

    • 定义功能:count(node)
      • 在node为根结点的二叉树中统计结点数目

编程实验(一)

  • 二叉树中结点的数目

二叉树中属性操作的实现(二)

  • 二叉树的高度

    • 定义功能:height(node)
      • 获取node为根结点的二叉树的高度

编程实验(二)

  • 二叉树的高度

二叉树中属性操作的实现(三)

  • 树的度数

    • 定义功能:degree(node)
      • 获取node为根结点的二叉树的度数

编程实验(三)

  • 二叉树的度数

思考:如何遍历BTree(二叉树结构)的每一个结点?

66 二叉树结构的层次遍历

二叉树结构的层次遍历

  • 二叉树的遍历 二叉树的遍历(Traversing Binary Tree)是指从根结点出发,按照某种次序依次访问二叉树中的所有结点,使得每个结点被访问一次,且仅被访问一次。

  • 需要考虑的问题 通用树结构的层次遍历算法是否可以用在二叉树结构上?如果可以,代码需要做怎样的改动?

  • 设计思路(游标) 提供一组遍历相关的函数,按层次访问二叉树中的数据元素。

    函数功能说明
    begin()初始化,准备进行遍历访问
    next()移动游标,指向下一个结点
    current()获取游标所指向的数据元素
    end()判断游标是否到达尾部
  • 层次遍历算法

    • 原料: class LinkQueue<T>;
    • 游标: LinkQueue<T>::front();
    • 思想:
      • begin()→将根结点压入队列中
      • current()→访问队头元素指向的数据元素
      • next()→队头元素弹出,将队头元素的孩子压入栈中(核心)
      • end()→判断队列是否为空
  • 层次遍历算法示例

    函数调用队列状态出队结点
    begin()1
    next()2,31
    next()3,4,52
    next()4,5,6,73
    next()5,6,7,8,94
    next()6,7,8,9,105
    next()7,8,9,106
    next()8,9,107
    next()9,108
    .........

编程实验

  • 二叉树的层次遍历

  • To be continued ...

    思考:BinaryTree(二叉树结构)是否只有一种遍历的方法?